package com.gao.mybatis.mapper;

import com.gao.mybatis.pojo.User;
import com.sun.corba.se.spi.ior.ObjectKey;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Projectname SSM
 * @Filename SelectMapper
 * @Author an
 * @Data 2022/7/28 21:47
 * @Description TODO
 */
public interface SelectMapper {

    /*
    * 若sql查询的结果为多条时，一定不能以实体类型作为返回值
    * 否则会抛出异常TooManyResultsException；
    * 但是查询出来的数据为一条时候，可以使用实体类型或者list集合作为方法的返回值。
    * */


    //根据用户的id查询用户信息
    User getUserById(@Param("id") Integer Id);

    //查询所有用户信息
    List<User> getAllUser();

    //查询用户的总数量
    Integer getCount();

    //查询用户（map）
    Map<String,Object> getUserByIdToMap(@Param("id") Integer id);


    /*
    * 查询所有的用户信息为map集合
    * 如果查询到的数据有多条的时候，并且要将每条数据转换为map集合
    * 此时有两种方案：
    * 1.将mapper接口方法的返回值设置为泛型是map的list集合
    * List<Map<String,Object>> getAllUserToMap();
    * 2.可以将每条数据转换的map集合放在一个大map集合，但是必须通过@MapKey注解
    * 将查询到的某个字段的值作为大的map的键
    * @MapKey("id")
    Map<String,Object> getAllUserToMap();
    * */

    //查询所有用户（map）
//    List<Map<String,Object>> getAllUserToMap();

    @MapKey("id")
    Map<String,Object> getAllUserToMap();

}
